home *** CD-ROM | disk | FTP | other *** search
- SUBR PROC FAR
- SPACE
- ; -------------------------------------------------------------------
- ; ADD BCD NUMBERS
- ; THIS ROUTINE ADDS TWO BCD NUMBERS OF EQUAL LENGTH
- ; ASSUMPTIONS:
- ; CX CONTAINS THE LENGTH OF THE FIELDS BEING ADDED
- ; SI POINTS TO THE LEFTMOST BYTE OF THE BCD DATA
- ; DI POINTS TO THE SECOND OPPERAND WHICH IS OVERLAID BY RESULT
- ; AX DESTROYED BY THIS ROUTINE
- ;
- BCDADD LABEL FAR
- CLC ;CLEAR CARY FLAG
- BCD1 LABEL NEAR
- MOV AL,[SI] ;GET A DATA BYTE
- ADC AL,[DI] ;ADD A BYTE
- DAA ;ADJUST RESULT
- MOV [DI],AL ;STORE ANSWER
- INC SI ;BUMP POINTER
- INC DI ;BUMP POINTER
- DEC CX ;DECREMENT AND TEST
- JNZ BCD1 ;LOOP TILL DONE
- RET ;BACK TO CALLER
- SPACE 2
- ; ADD ASCII NUMBERS
- ; LINKAGE IS SAME AS ABOVE
- ;
- ASCADD LABEL FAR
- CLC ;CLEAR CARRY FLAG
- ASC1 LABEL NEAR
- MOV AL,[SI] ;GET A BYTE
- ADC AL,[DI] ;ADD DATA
- AAA ;ADJUST RESULT
- MOV [DI],AL ;STORE ANSWER
- INC SI ;BUMP POINTER
- INC DI ;BUMP POINTER
- DEC CX ;LOOP CONTROL
- JNZ ASC1 ;LOOP FOR MORE
- RET
- ;
- ; -------------------------------------------------------------
- SUBR ENDP
-